<?
function critcoluna($A,$dim)
{
	$indmaior=0;
	for ($j=0; $j<$dim; $j++)
	{
		$soma[$j]=0;
		for ($i=0; $i<$dim; $i++) if ($i != $j) $soma[$j]+=abs($A[$i][$j])/abs($A[$i][$i]);
		if ($soma[$j] > $soma[$indmaior]) $indmaior=$j;
	}
	if ($soma[$indmaior] < 1) return true;
	return false;
}
function diagonaldominante(&$A,&$T,$dim)
{
	for ($i = 0; $i < $dim; $i++)
	{
		$soma[$i] = 0;
		for ($j=0; $j<$dim; $j++) if ($i != $j) $soma[$i]+=abs($A[$i][$j]);
		if ($soma[$i] >= abs($A[$i][$i]))
		{
			echo "<br>Tentando trocar linha ".($i+1);
			for ($k=$i+1; $k<$dim; $k++)
			{
				$soma_tmp=0;
				for ($j=0; $j<$dim; $j++) if ($i != $j) $soma_tmp+=abs($A[$k][$j]);
				if ($soma_tmp < abs($A[$k][$i]))
				{
					echo "<br>Trocando linha ".($i+1)." por linha ".($k+1);
					for ($y=0; $y<$dim;$y++)
					{
						$tmp=$A[$k][$y];
						$A[$k][$y]=$A[$i][$y];
						$A[$i][$y]=$tmp;
					}
					$tmp=$T[$i];
					$T[$i]=$T[$k];
					$T[$k]=$tmp;
					$k=$dim+1;
				}
			}
			if ($k==$dim) {echo"<br>Nao h&aacute; linhas a serem trocadas<br>";return false;}
		}
	}
	return true;
}

function sassenfeld($A,$dim)
{
	$indmaior=0;
	for ($i = 0; $i < $dim; $i++)
	{
		$beta[$i]=0;
		echo "<br>";
		for ($j = 0; $j <= ($i - 1); $j++)
		{ $beta[$i]+=abs($A[$i][$j])/abs($A[$i][$i])* $beta[$j];
		  echo "+".abs($A[$i][$j])."/".abs($A[$i][$i])."*".$beta[$j];
		}
		for ($j = $i+1; $j < $dim; $j++)
		{ $beta[$i]+=abs($A[$i][$j])/abs($A[$i][$i]);
		  echo "+".abs($A[$i][$j])."/".abs($A[$i][$i]);
		}
		echo "=".$beta[$i];
		if ($beta[$indmaior] < $beta[$i]) $indmaior=$i;
	}
	if ($beta[$indmaior] < 1) return true;
	return false;
}

$A[0][0]=5;$A[0][1]=1;$A[0][2]=1;
$A[1][0]=3;$A[1][1]=4;$A[1][2]=1;
$A[2][0]=1;$A[2][1]=5;$A[2][2]=1;
$T[0]=5;
$T[1]=6;
$T[2]=0;
if (sassenfeld($A,3) == true) echo "Crit&eacute;rio de Sassenfeld &eacute; v&aacute;lido\n";
else echo "Crit&eacute;rio de Sassenfeld n&atilde;o &eacute; v&aacute;lido\n";
if (diagonaldominante($A,$T,3) == true) echo "Diagonalmente dominante<br>\n";
else echo "N&atilde;o &eacute; diagonalmente dominante<br>\n";
if (critcoluna($A,3) == true) echo "Crit&eacute;rio das colunas &eacute; v&aacute;lido\n";
else echo "Crit&eacute;rio das colunas n&atilde;o &eacute; v&aacute;lido\n";
echo "<br><br>";
for ($i=0; $i<3; $i++)
{
	for ($j=0; $j<3; $j++)
	{
		echo "+ ".$A[$i][$j]."<sub>x".($j+1)."</sub> ";
	}
	echo "=".$T[$i]."<br>";
}
?>
